package com.study.flink.java.utils;

import org.rocksdb.Options;
import org.rocksdb.RocksDB;
import org.rocksdb.RocksDBException;

/**
 * RocksDb（类似于本地的Hbase）
 * 本地的嵌入式的KV对的DB（数据库就镶嵌在软件产品中，如Sqlite）
 * 由facebook开发
 * 存储的数据庞大，且高效
 * 不需要安装，通过API的形式来启用
 * 底层源码使用C语言开发
 * RocksDb的数据文件可以达到数PB级别
 */
public class RocksDbUtils {

    static {
        // 因为RocksDb是由C++编写，在java中使用首先需要加载Native库
        RocksDB.loadLibrary();
    }


    /**
     * 测试
     * @param args
     * @throws RocksDBException
     */
    public static void main(String[] args) throws RocksDBException {

        Options dbOpt = new Options();
        // 配置当前数据库不存在自动创建
        dbOpt.setCreateIfMissing(true);
        RocksDB rdb = RocksDB.open(dbOpt, "dir/rocksdb/tmp");

        byte[] key = "你好".getBytes();
        byte[] value = "rocksdb".getBytes();
        // 写入数据
        rdb.put(key, value);

        System.out.println("写入数据到rocksDB完成！");
        System.out.println("从rocksdb中读取key=" + new String(key) + ",value=" + new String(rdb.get(key)));

        // 移除
        //rdb.delete(key);
        rdb.close();
        dbOpt.close();
    }
}
